package framework;

import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class GeradorHTML {

	public static String gerarLinha(String Label,Field atributo,Object objeto,String controle) throws Exception, Throwable{
		String linhaGerada = "<tr> <td>" + Label + "</td>";
		String nomeDoCampo = atributo.getName();
		Object valorDoCampo = atributo.get(objeto);
		Class<?> tipoDoCampo = atributo.getType();
		if(tipoDoCampo.equals(String.class)){
			linhaGerada +="<td><INPUT TYPE=\"TEXT\" NAME=\"" + nomeDoCampo + "\" VALUE=\"" + valorDoCampo + "\"></td> </tr>\n";
		}
		if(tipoDoCampo.equals(Date.class)){
			SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");  
			linhaGerada ="<td><INPUT TYPE=\"DATE\" NAME=\"" + nomeDoCampo + "\" VALUE=\"" + formatter.format(valorDoCampo) + "\"</td> </tr>\n";;
		}
		if(tipoDoCampo.equals(String[].class)){
			String[] campo = (String[]) valorDoCampo;
			linhaGerada="<td><SELECT NAME=\"" + nomeDoCampo + "\" SIZE=\""+ campo.length  +"\">";
			for(int i=0;i<campo.length;i++){
				linhaGerada += "<OPTION VALUE=\" "+ i +" \"> " + campo[i] +"</OPTION>";
			}
		}
		if(tipoDoCampo.equals(boolean.class)){
			linhaGerada =  "<td><INPUT TYPE=\"CHECKBOX\" value=\"true\" name=\"" + nomeDoCampo + "\"";
			if(valorDoCampo.equals(true)){
				linhaGerada += " checked=\"checked\"";
			}
			linhaGerada += ">Verdade</td></tr>\n";
			
		}
		return null;	
	}
	
	public static String gerarHtmldosCampos(Object objeto) throws IllegalArgumentException, IllegalAccessException{
		Class classe = objeto.getClass();
		String nomeDoCampo = "";
		Object valorDoCampo = "";
		String htmlGerado = iniciarArquivoHtml(objeto);
		String linhaGerada = "";
		Class<?> tipoDoCampo;
		htmlGerado += "<center><table>\n" + "<table  border=\"2\">\n";
		for(Field atributo : classe.getDeclaredFields()){
			nomeDoCampo = atributo.getName();
			valorDoCampo = atributo.get(objeto);
			tipoDoCampo = atributo.getType();
			
			if(tipoDoCampo.equals(String.class)){
				linhaGerada ="<tr> <td>" + nomeDoCampo + "</td> <td><INPUT TYPE=\"TEXT\" NAME=\"nome\" VALUE=\"" + valorDoCampo + "\"></td> </tr>\n";
			}
			
			if(tipoDoCampo.equals(Date.class)){
				linhaGerada ="<tr> <td>" + nomeDoCampo + "</td> <td><INPUT TYPE=\"DATE\" NAME=\"dataNasc\" VALUE=\"" + valorDoCampo + "\"</td> </tr>\n";;
			}
			if(tipoDoCampo.equals(String[].class)){
				String[] campo = (String[]) valorDoCampo;
				linhaGerada="<tr> <td>" + nomeDoCampo + "</td> <td><SELECT NAME=\"projetos\" SIZE=\""+ campo.length  +"\">";
				for(int i=0;i<campo.length;i++){
					linhaGerada += "<OPTION VALUE=\" "+ i +" \"> " + campo[i] +"</OPTION>";
				}
			}
			if(tipoDoCampo.equals(boolean.class)){
				linhaGerada =  "<tr> <td>" + nomeDoCampo + "</td><td><INPUT TYPE=\"CHECKBOX\" value=\"true\" name=\"autoriza\"";
				if(valorDoCampo.equals(true)){
					linhaGerada += " checked=\"checked\"";
				}
				linhaGerada += ">Verdade</td></tr>\n";
				
			}
			htmlGerado += linhaGerada;
		}
		htmlGerado += "</table></center>\n";
		return htmlGerado + finalizarArquivoHtml();
	}
	
	public String iniciarArquivoHtml(String tituloHtml, String tituloPagina){
		String htmlPadrao;
		htmlPadrao = "<html>\n" +
					 "<head><title>" + tituloHtml + "</title></head>\n" +
					 "<body>\n" +
					 "<center><h2>" + tituloPagina + "</h2></center>\n";
		return htmlPadrao;
	}
	
	private static String iniciarArquivoHtml(Object objeto){
		String htmlPadrao;
		htmlPadrao = "<html>\n" +
					 "<head><title>" + "Html do objeto " + objeto.getClass().toString() + "</title></head>\n" +
					 "<body>\n" +
					 "<center><h2>" + objeto.getClass().toString() + "</h2></center>\n";
		return htmlPadrao;
	}
	
	private static String finalizarArquivoHtml(){
		String htmlPadrao = "";
		htmlPadrao = "</body>\n" +
					 "</html>\n";
		return htmlPadrao;
	}
	
	private static void salvar(String arquivo, String conteudo, boolean adicionar) throws IOException {
		FileWriter fw = new FileWriter(arquivo, adicionar);
		fw.write(conteudo);
		fw.close();
	}
}
